package cn.xuqiudong.rpc.registry;

import cn.xuqiudong.rpc.common.model.XqdUrl;

import java.util.List;

/**
 * 描述:定义注册中心核心功能的接口
 * @author Vic.xu
 * @date 2022-02-15 11:26
 */
public interface Registry {

    /**
     * 把地址注册中心，如服务提供者注册服务
     * @param url
     */
    void register(XqdUrl url);

    /***
     * 把某个地址从注册中心取消
     * @param url
     */
    void unregister(XqdUrl url);


    /**
     * 订阅，注册数据变化时候推送
     * @param url
     * @param listener
     */
    void subscribe(XqdUrl url, NotifyListener listener);

    /**
     * 取消订阅
     * @param url
     * @param listener
     */
    void unsubscribe(XqdUrl url, NotifyListener listener);

    /**
     * 查询符合条件的注册数据。
     * @param url
     * @return 注册信息列表，可以为空，含义同 NotifyListener.notify(List)的参数。
     */
    List<XqdUrl> lookup(XqdUrl url);
}
